package monster.comm.util;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

/**
 * 创建信息============= 类名: monster.comm.util.EmptyStringTypeHandler 
 * 类作用描述:
 * 扩展mybatis对string类型的操作
   1、截取空格  2 把空字符串转成null

 * 创建人： wanghong 
 * 创建时间： 2013-1-8 下午04:47:56 
 * 修改信息1============= 
 * 修改类型:
 * //1.修改bug 2.业务变化修改
 *  修改描述: 
 *  修改人：
 *   修改时间：
 */
@SuppressWarnings("unchecked")
public class EmptyStringTypeHandler<T> implements TypeHandler<T> {

	@Override
	public T getResult(ResultSet rs, String columnName) throws SQLException {
		return (T) rs.getString(columnName);
	}

	@Override
	public T getResult(ResultSet rs, int columnIndex) throws SQLException {
		return (T) rs.getString(columnIndex);
	}

	@Override
	public T getResult(CallableStatement cs, int columnIndex)
			throws SQLException {
		return (T) cs.getString(columnIndex);
	}

	/**
	 * 将空字符串转化为NULL 在mapper文件中必须配置jdbcType
	 */
	@Override
	public void setParameter(PreparedStatement ps, int i, T parameter,
			JdbcType jdbcType) throws SQLException {
		String p = Tool.isNull((String) parameter);
		if (jdbcType != null) {// 配置jdbctype参数			
			if (p.equals("")) {
				if (jdbcType.compareTo(JdbcType.VARCHAR) == 0) {
					ps.setString(i, p);
				}else if (jdbcType.compareTo(JdbcType.NUMERIC) == 0) {
					ps.setObject(i, null);
				}else if (jdbcType.compareTo(JdbcType.INTEGER) == 0) {
					ps.setObject(i, null);
				}else{
					ps.setObject(i, null);
				}
			}else{
				if (jdbcType.compareTo(JdbcType.VARCHAR) == 0) {
					ps.setString(i, p);
				}else if (jdbcType.compareTo(JdbcType.NUMERIC) == 0) {
					ps.setObject(i, p);
				}else if (jdbcType.compareTo(JdbcType.INTEGER) == 0) {
					ps.setInt(i, Integer.parseInt(p));
				}else{
					ps.setObject(i, p);
				}
			}

		} else {
			ps.setString(i, p);
		}

	}

}
